#pragma once
#include <iostream>
using namespace std;

class TokenType{
    public:
        enum type{
            MAIN,
            INT,
            DOUBLE,
            FLOAT,
            SHORT,
            LONG,
            BOOL,
            CHAR,
            VOID,
            STRING,
            UNSIGNED,
            RETURN,
            SWITCH,
            DEFAULT,
            CASE,
            FOR,
            BREAK,
            WHILE,
            CONTINUE,
            DO,
            IF,
            ELSE,
            PLUS,
            MINUS,
            MULTIPLY,
            DIVIDE,
            EQUAL,
            GREATER,
            GREATER_EQUAL,
            LESS,
            LESS_EQUAL,
            EQUAL_EQUAL,
            NOT_EQUAL,
            NOT,
            OR,
            AND,
            AND_AND,
            OR_OR,
            PLUS_PLUS,
            MINUS_MINUS,
            PLUS_EQUAL,
            MINUS_EQUAL,
            MULTIPLY_EQUAL,
            DIVIDE_EQUAL,
            AND_EQUAL,
            OR_EQUAL,  
            LEFT_SMALL_BRACKET,
            RIGHT_SMALL_BRACKET,
            LEFT_MID_BRACKET,
            RIGHT_MID_BRACKET,
            LEFT_BIG_BRACKET,
            RIGHT_BIG_BRACKET,
            DOUBLE_QUATATION,
            SINGLE_QUATATION,
            COMMA,
            SEMICOLON,
            IDENTIFIER,
            CONSTANT_STRING,
            CONSTANT_CHARACTER,
            CONSTANT_INTEGER,
            CONSTANT_DECIMAL
        };
        static int get_type_cnt(){ return CONSTANT_DECIMAL+1; }
    private:
        static const int type_cnt = sizeof(type)/sizeof(int);
};


//class Lexer{
//    private:
//        string file_content;
//    public:
//        (const string& file_content) {
//        }
//};
